package com.yida.wy.vote.service;

import com.yida.wy.vote.domain.WyVoteProject;
import com.yida.wy.vote.domain.dto.WyBaseHouseOwnerDTO;
import com.yida.wy.vote.domain.dto.WyVoteProjectDetailDTO;
import com.yida.wy.vote.domain.request.WyVoteAuditRequest;
import com.yida.wy.vote.domain.request.WyVoteProjectRequest;

import java.util.List;

/**
 * 投票项目Service接口
 *
 * @author lqq
 * @date 2023-03-10
 */
public interface IWyVoteProjectService {
    /**
     * 查询投票项目
     *
     * @param voteId 投票项目主键
     * @return 投票项目
     */
    public WyVoteProject selectVoteProjectByVoteId(Long voteId);

    /**
     * 查询单条投票项目
     *
     * @param voteProject 投票项目
     * @return 投票项目
     */
    public WyVoteProject selectVoteProject(WyVoteProject voteProject);

    /**
     * 查询投票项目列表
     *
     * @param voteProject 投票项目
     * @return 投票项目集合
     */
    public List<WyVoteProject> selectVoteProjectList(WyVoteProject voteProject);

    /**
     * 新增投票项目
     *
     * @param voteProject 投票项目
     * @return 结果
     */
    public int insertVoteProject(WyVoteProject voteProject);

    /**
     * 修改投票项目
     *
     * @param voteProject 投票项目
     * @return 结果
     */
    public int updateVoteProject(WyVoteProject voteProject);

    /**
     * 批量删除投票项目
     *
     * @param voteIds 需要删除的投票项目主键集合
     * @return 结果
     */
    public int deleteVoteProjectByVoteIds(Long[] voteIds);

    /**
     * 删除投票项目信息
     *
     * @param voteId 投票项目主键
     * @return 结果
     */
    public int deleteVoteProjectByVoteId(Long voteId);

    /**
     * 新增投票
     *
     * @param request 投票项目
     * @param data    基础楼栋房屋业主数据
     * @return 结果
     */
    boolean addVote(WyVoteProjectRequest request, WyBaseHouseOwnerDTO data);

    /**
     * 校验投票是否存在
     *
     * @param bizNum 业务编号
     */
    void checkVoteProjectExist(Long bizNum);

    /**
     * 保存或修改
     *
     * @param request 投票项目
     * @param isEVote 是否是电子投票
     * @return 结果
     */
    boolean updateVote(WyVoteProjectRequest request, boolean isEVote);

    /**
     * 取消投票
     *
     * @param voteId 投票ID
     * @return 结果
     */
    int voteCancel(Long voteId);

    /**
     * 发起投票
     *
     * @param voteId 投票ID
     * @return 结果
     */
    int voteStart(Long voteId);

    /**
     * 短信通知
     *
     * @param voteId 投票ID
     * @return 结果
     */
    boolean voteSmsNotification(Long voteId);

    /**
     * 投票审核（同意不同意）
     *
     * @param request 投票项目
     * @param isAgree 是否同意
     * @return 结果
     */
    int voteAudit(WyVoteAuditRequest request, boolean isAgree);

    /**
     * 投票详情
     *
     * @param voteId 投票ID
     * @return 结果
     */
    WyVoteProjectDetailDTO voteDetail(Long voteId);

}
